<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>package</title>
</head>
<body>
<script>
/*闭包是js的一个重要概念。闭包通过利用js的作用域特性，完成了对函数处理的保护*/
//以下为一个简易闭包，等号后的这个函数一般称为匿名函数
    // var package = (function(){  //用一对小括号将function包裹起来
    //     //闭包内部作用域
    // })();  //后面这对小括号是对匿名函数的自执行。package接收的是匿名函数的返回值
/*****************************************************************************************/

//来上个实例
/*这个实例上来理解了一个效果。生成闭包后，这个闭包会一直存在内存空间中。所以bookNum这个参数可以用来统计new的数量。
同时，由于闭包的这一特性，所以使用闭包是很消耗内存的，要控制闭包数量*/
// var Book = (function(){
//     //静态私有变量
//     var bookNum = 0;
//     //静态私有方法
//     function checkBook(name){}
//     //创建类
//     function _book(newId,newName,newPrice){
//         //私有变量
//         var name,price;
//         //私有方法
//         function checkId(id){
//             console.log(id)
//         }
//         //特权方法
//         this.setName = function(){
//             console.log("设置name");
//         }
//         this.getName = function(){
//             console.log("获取name");
//         }
//         this.getNum = function(){
//             console.log(bookNum);
//         }
//         //公有属性和方法
//         this.id = newId;
//         this.copy = function(){
//             console.log("copy");
//         };

//         bookNum++;        
//         if(bookNum>3){
//             throw new Error('别超过3本~');
//         }
//         //构造器
//         this.setName(name);
//         this.getName();  
//         this.getNum();      
//     }
//     _book.prototype={
//         //静态公有属性
//         isJsBook : false,
//         display:function(){
//             console.log(this.name);
//         }
//     }

//     //返回类
//     return _book;
// })();

// //实例化一波
// var a = new Book(10,"js",50);
// var b = new Book(11,"java",0.1);
// var c = new Book(12,"php",0.1);
// var d = new Book(13,"python",0.1);
// console.log(a);
// console.log(Book.bookNum);
</script>
</body>
</html>